﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;

namespace Servidor
{
    /// <summary>
    /// Summary description for Service1
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    // [System.Web.Script.Services.ScriptService]
    public class Service1 : System.Web.Services.WebService
    {
        Servidor ServidorDB;
        Servidor ServidorDBCuentas;
        String NombreBaseDatos;

        public Service1()
        {
            ServidorDB = new Servidor(1, NombreBaseDatos);
            ServidorDBCuentas = new Servidor(2, NombreBaseDatos);
        }

        [WebMethod]
        public string AbrirConexion()
        {
            return "DB " + ServidorDB.AbrirConexion() + " SIA " + ServidorDBCuentas.AbrirConexion();
        }

        [WebMethod]
        public string CerrarConexion()
        {
            return "DB " + ServidorDB.CerrarConexion() + " SIA " + ServidorDBCuentas.CerrarConexion();
        }

        [WebMethod]
        public List<string> Consultar(int tipo)
        {
            return ServidorDB.Consultar(tipo);
        }

        [WebMethod]
        public List<string> ConsultarEmpresa(int tipo, string nombre_empresa)
        {
            String NombreEmpresa = nombre_empresa.ToLower();
            ServidorDBCuentas = new Servidor(2, NombreEmpresa);
            return ServidorDBCuentas.Consultar(tipo);
        }

        [WebMethod]
        public List<string> ConsultarEmpresaCliente(int tipo, string nombre_empresa, string cliente, string articulo)
        {
            String NombreEmpresa = nombre_empresa.ToLower();
            ServidorDBCuentas = new Servidor(2, NombreEmpresa);
            if (tipo == 1)
                return ServidorDBCuentas.Consulta1(cliente, articulo);
            else if (tipo == 2)
                return ServidorDBCuentas.Consulta2(cliente, articulo);
            else
                return ServidorDBCuentas.Consulta3(cliente);
        }

        [WebMethod]
        public void Crear_Empresa(string nombre, string cedula, string logo, string pais)
        {
            ServidorDB.Crear_Empresa(nombre, cedula, logo, pais);
        }

        [WebMethod]
        public void Crear_Asiento(string fecha, string fechaDocumento, string ref1, string ref2, string tipoAsiento, string nombre_empresa)
        {
            String NombreEmpresa = nombre_empresa.ToLower();
            ServidorDBCuentas = new Servidor(2, NombreEmpresa);
            ServidorDBCuentas.Crear_Asiento(fecha, fechaDocumento, ref1, ref2, tipoAsiento);
        }

        [WebMethod]
        public void Asociar_AsientoXCuenta(string codCuenta, int debe, string monto, string nombre_empresa)
        {
            String NombreEmpresa = nombre_empresa.ToLower();
            ServidorDBCuentas = new Servidor(2, NombreEmpresa);
            ServidorDBCuentas.Asociar_AsientoXCuenta(codCuenta, debe, monto);
        }

        [WebMethod]
        public void Crear_Cuenta(String codigo, String nombre, String nombre_extranjero, int titulo, String nombre_empresa)
        {
            String NombreEmpresa = nombre_empresa.ToLower();
            ServidorDBCuentas = new Servidor(2, NombreEmpresa);
            ServidorDBCuentas.Crear_Cuenta(codigo, nombre, nombre_extranjero, titulo);
        }

        [WebMethod]
        public float Obtener_Saldo_SocioNegocio(String socio, string nombre_empresa)
        {
            String NombreEmpresa = nombre_empresa.ToLower();
            ServidorDBCuentas = new Servidor(2, NombreEmpresa);
            return ServidorDBCuentas.Obtener_Saldo_SocioNegocio(socio);
        }

        [WebMethod]
        public string Obtener_Info_Empresa(string NombreEmpresa)
        {
            return ServidorDB.Obtener_Info_Empresa(NombreEmpresa);
        }

        [WebMethod]
        public void Crear_Bodega(String codigo, String nombre, String nombre_empresa)
        {
            String NombreEmpresa = nombre_empresa.ToLower();
            ServidorDBCuentas = new Servidor(2, NombreEmpresa);
            ServidorDBCuentas.Crear_Bodega(codigo, nombre);
        }

        [WebMethod]
        public void Crear_Articulo(String socio_negocio, String nombre, String codigo, String unidad_medida, String descripcion, String imagen, String nombre_empresa)
        {
            String NombreEmpresa = nombre_empresa.ToLower();
            ServidorDBCuentas = new Servidor(2, NombreEmpresa);
            ServidorDBCuentas.Crear_Articulo(socio_negocio, nombre, codigo, unidad_medida, descripcion, imagen);
        }

        [WebMethod]
        public string Ver_Articulo(String articulo, String nombre_empresa)
        {
            string NombreEmpresa = nombre_empresa.ToLower();
            ServidorDBCuentas = new Servidor(2, NombreEmpresa);
            return ServidorDBCuentas.Ver_Articulo(articulo);
        }

        [WebMethod]
        public bool Autenticar_Usuario(String nombre, String contraseña, String empresa)
        {
            bool ResultadoAutenticacion;
            ResultadoAutenticacion = ServidorDB.Autenticar_Usuario(nombre, contraseña, empresa);
            if (ResultadoAutenticacion)
                ServidorDBCuentas = new Servidor(2, empresa);
            return ResultadoAutenticacion;
        }

        [WebMethod]
        public string Hacer_Cierre(String ctaIR, String ctaDividendos, String utilidades, float dividendos, float impuesta_renta, String nombre_empresa)
        {
            String NombreEmpresa = nombre_empresa.ToLower();
            ServidorDBCuentas = new Servidor(2, NombreEmpresa);
            return ServidorDBCuentas.Hacer_Cierre(ctaIR, ctaDividendos, utilidades, dividendos, impuesta_renta, nombre_empresa);
        }

        [WebMethod]
        public List<String> Obtener_Cuentas(Boolean titulo, String nombre_empresa)
        {
            String NombreEmpresa = nombre_empresa.ToLower();
            ServidorDBCuentas = new Servidor(2, NombreEmpresa);
            return ServidorDBCuentas.Obtener_Cuentas(titulo);
        }

        [WebMethod]
        public List<String> Obtener_Articulo(String socionegocio, String nombre_empresa)
        {
            String NombreEmpresa = nombre_empresa.ToLower();
            ServidorDBCuentas = new Servidor(2, NombreEmpresa);
            return ServidorDBCuentas.Obtener_Articulo(socionegocio);
        }

        [WebMethod]
        public void Establecer_Saldo(float monto, String codigo_cuenta, String nombre_empresa)
        {
            String NombreEmpresa = nombre_empresa.ToLower();
            ServidorDBCuentas = new Servidor(2, NombreEmpresa);
            ServidorDBCuentas.Establecer_Saldo(monto, codigo_cuenta);
        }

        [WebMethod]
        public void Modificar_Saldo(float monto, String codigo_cuenta, String nombre_empresa)
        {
            String NombreEmpresa = nombre_empresa.ToLower();
            ServidorDBCuentas = new Servidor(2, NombreEmpresa);
            ServidorDBCuentas.Actualizar_Saldo(monto, codigo_cuenta);
        }

        [WebMethod]
        public List<string> Obtener_Asientos(String nombre_empresa)
        {
            String NombreEmpresa = nombre_empresa.ToLower();
            ServidorDBCuentas = new Servidor(2, NombreEmpresa);
            return ServidorDBCuentas.Obtener_Asientos();
        }

        [WebMethod]
        public List<string> Obtener_Info_Asiento(int id, String nombre_empresa)
        {
            String NombreEmpresa = nombre_empresa.ToLower();
            ServidorDBCuentas = new Servidor(2, NombreEmpresa);
            return ServidorDBCuentas.Obtener_Info_Asiento(id);
        }

        [WebMethod]
        public void Crear_Socio_Negocio(String nombre, String email, float max_credito, int proveedor, String cuenta, String ctaBco, String nombre_empresa)
        {
            String NombreEmpresa = nombre_empresa.ToLower();
            ServidorDBCuentas = new Servidor(2, NombreEmpresa);
            ServidorDBCuentas.Crear_Socio_Negocio(nombre, email, max_credito, proveedor, cuenta, ctaBco);
        }

        [WebMethod]
        public List<string> Obtener_Articulos(Boolean articulo, String nombre, String nombre_empresa)
        {
            String NombreEmpresa = nombre_empresa.ToLower();
            ServidorDBCuentas = new Servidor(2, NombreEmpresa);
            return ServidorDBCuentas.Obtener_Articulos(articulo, nombre);
        }

        [WebMethod]
        public List<string> Obtener_Articulos_Bodega(String nombre_empresa)
        {
            String NombreEmpresa = nombre_empresa.ToLower();
            ServidorDBCuentas = new Servidor(2, NombreEmpresa);
            return ServidorDBCuentas.Obtener_Articulos_Bodega();
        }

        [WebMethod]
        public void Operacion_Inventario(int tipo, String codigo_bodega, String nombre_articulo, float cantidad, String nombre_empresa)
        {
            String NombreEmpresa = nombre_empresa.ToLower();
            ServidorDBCuentas = new Servidor(2, NombreEmpresa);
            ServidorDBCuentas.Operacion_Inventario(tipo, codigo_bodega, nombre_articulo, cantidad);

        }

        [WebMethod]
        public void Asociar_Articulo_Bodega(String codigo_bodega, String nombre_articulo, String inventario, String costo_ventas, String ventas, String compras, int mx_u, int mn_u, String nombre_empresa)
        {
            String NombreEmpresa = nombre_empresa.ToLower();
            ServidorDBCuentas = new Servidor(2, NombreEmpresa);
            ServidorDBCuentas.Asociar_Articulo_Inventario(codigo_bodega, nombre_articulo, inventario, costo_ventas, ventas, compras, mx_u, mn_u);
        }

        [WebMethod]
        public void Crear_Documento(String nombre_socio, String fecha_contabilizacion, String fecha_entrega, Double total_antesimpuesto, Double monto_impuesto,
        Double total, String descripcion, String tipo_documento, String ref_otrodocumento, String nombre_empresa, Boolean dotacion, String cuenta_dotacion)
        {
            String NombreEmpresa = nombre_empresa.ToLower();
            ServidorDBCuentas = new Servidor(2, NombreEmpresa);
            ServidorDBCuentas.Crear_Documento(nombre_socio, fecha_contabilizacion, fecha_entrega, total_antesimpuesto, 
            monto_impuesto, total, descripcion, tipo_documento, ref_otrodocumento, dotacion, cuenta_dotacion);
        }

        [WebMethod]
        public void Agregar_FilaDocumento(String FilaDocumento, String nombre_empresa, Boolean dotacion, String cuenta_dotacion,
        String tipo_documento, String documento_referencia)
        {
            String NombreEmpresa = nombre_empresa.ToLower();
            ServidorDBCuentas = new Servidor(2, NombreEmpresa);

            String articulo = FilaDocumento.Split(';')[0];
            String bodega = FilaDocumento.Split(';')[1];
            String impuesto =FilaDocumento.Split(';')[2];
            int cantidad = Convert.ToInt32(FilaDocumento.Split(';')[3]);
            Double precio_compra = Convert.ToDouble(FilaDocumento.Split(';')[4]);
            Double total = Convert.ToDouble(FilaDocumento.Split(';')[5]);

            ServidorDBCuentas.Agregar_FilaDocumento(articulo, bodega, impuesto, cantidad, precio_compra, total, dotacion, cuenta_dotacion, tipo_documento, documento_referencia);
        }

        [WebMethod]
        public List<String> Cargar_Documento(String codigo_documento, String nombre_empresa)
        {
            String NombreEmpresa = nombre_empresa.ToLower();
            ServidorDBCuentas = new Servidor(2, NombreEmpresa);

            return ServidorDBCuentas.Cargar_Documento(codigo_documento);
        }

        [WebMethod]
        public List<String> Obtener_Saldos_Cuentas(bool titulo, String nombre_empresa)
        {
            String NombreEmpresa = nombre_empresa.ToLower();
            ServidorDBCuentas = new Servidor(2, NombreEmpresa);
            return ServidorDBCuentas.Obtener_Saldos_Cuentas(titulo);
        }

        [WebMethod]
        public List<String> Obtener_Cuentas_Codigo(char codigo, String nombre_empresa)
        {
            String NombreEmpresa = nombre_empresa.ToLower();
            ServidorDBCuentas = new Servidor(2, NombreEmpresa);
            return ServidorDBCuentas.Obtener_CuentasXCodigo(codigo);
        }

        [WebMethod]
        public bool Autenticar_Proveedor(String nombre,String pass, String empresa)
        {
            String nombEmpresa = empresa.ToLower();
            bool ResultadoAutenticacion;
            ServidorDBCuentas = new Servidor(2, nombEmpresa);
            ResultadoAutenticacion = ServidorDBCuentas.Autenticar_Proveedor(nombre, pass);
            return ResultadoAutenticacion;
        }
        
        [WebMethod]
        public String DatabaseToXML(String empresa)
        {
            String NombreEmpresa = empresa.ToLower();
            ServidorDBCuentas = new Servidor(2, NombreEmpresa);
            return ServidorDBCuentas.DatabaseToXML();
        }

        [WebMethod]
        public List<String> Obtener_Docs_Socio(String socio, String empresa)
        {
            String NombreEmpresa = empresa.ToLower();
            ServidorDBCuentas = new Servidor(2, NombreEmpresa);
            return ServidorDBCuentas.Obtener_Docs_Socio(socio);
        }

        [WebMethod]
        public List<String> Obtener_Clientes(String empresa)
        {
            String NombreEmpresa = empresa.ToLower();
            ServidorDBCuentas = new Servidor(2, NombreEmpresa);
            return ServidorDBCuentas.Obtener_Clientes();
        }

        [WebMethod]
        public bool Revisar_Stock(String producto,String empresa)
        {
            String NombreEmpresa = empresa.ToLower();
            ServidorDBCuentas = new Servidor(2, NombreEmpresa);
            return ServidorDBCuentas.Revisar_Stock(producto);
        }

        [WebMethod]
        public void Enviar_Mail(String proveedor, String mensaje, string empresa)
        {
            String NombreEmpresa = empresa.ToLower();
            ServidorDBCuentas = new Servidor(2,NombreEmpresa);
            ServidorDBCuentas.Enviar_Mail(proveedor,mensaje);
        }

        [WebMethod]
        public string Obtener_Info_Doc(String codigo, string empresa)
        {
            String NombreEmpresa = empresa.ToLower();
            ServidorDBCuentas = new Servidor(2, NombreEmpresa);
            return ServidorDBCuentas.Obtener_Info_Doc(codigo);
        }
    } 
}
